package com.suyin.ximoon.dao;

import java.util.List;

import com.suyin.ximoon.plugin.mybatis.Criteria;

/**
 * 公用DAO 目前对DAO进行抽象，但是对mapper没有抽象，后面会进一步抽象
 * 
 * @author guo
 * 
 * @param <T>
 */
public interface BaseDao<T> {

	/**
	 * 保存对象
	 * 
	 * @param entity
	 * @return
	 */
	public abstract int insert(T entity);


	/**
	 * 保存字段和值
	 * 
	 * @param criteria
	 *            参数
	 */
	public abstract void insert(Criteria criteria);
	/**
	 * 批量保存
	 * 
	 * @param list
	 */
	public abstract void insert(List<T> list);

	/**
	 * 批量保存
	 * 
	 * @param criterias
	 *            集合
	 */
	public abstract void insertBatch(List<Criteria> criterias);
	
	/**
	 * 整体更新
	 * 
	 * @param entity
	 */
	public abstract void update(T entity);

	/**
	 * 批量更新
	 * 
	 * @param list
	 */
	public abstract void update(List<T> list);

	/**
	 * 根据ID 删除
	 * 
	 * @param id
	 */
	public abstract void deleteById(Integer id);

	/**

	/**
	 * 通过ID查询对象
	 * 
	 * @param id
	 * @return
	 */
	public abstract T queryOne(Integer id);


	/**
	 * 根据各种综合条件查询
	 * 
	 * @param criteria
	 * @return
	 */
	public abstract List<T> query(Criteria criteria);
	
	/**
	 * 综合条件查询
	 * 
	 * @param criteria
	 *            参数
	 * @return
	 */
	public abstract T queryOne(Criteria criteria);

	/**
	 * 根据各种条件进行统计
	 * 
	 * @param criteria
	 *            参数
	 * @return
	 */
	public abstract Integer count(Criteria criteria);

	/**
	 * 根据各种条件进行删除
	 * 
	 * @param criteria
	 */
	public abstract void delete(Criteria criteria);
	
	/**
	 * 根据条件进行修改 criteria 中的params,要填充
	 * 
	 * @param criteria
	 */
	public abstract void update(Criteria criteria);

	/**
	 * 批量更新
	 * 
	 * @param criterias
	 */
	public abstract void updateBatch(List<Criteria> criterias);
	/**
	 * 分页查询
	 * @return <T> List<T>
	 */
	public List<T> queryByPage(T entity);
}
